package com.train.chatspring.service;

import com.train.chatspring.model.User;
import com.train.chatspring.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
 * 用户服务类，使用 MySQL 存储用户信息和好友列表
 */
@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    /**
     * 用户登录验证
     *
     * @param username 用户名
     * @return 是否登录成功
     */
    public boolean login(String username) {
        return userRepository.findById(username).isPresent();
    }

    /**
     * 用户注册
     *
     * @param user 用户对象
     */
    public void register(User user) {
        user.setFriends("[]"); // 初始化好友列表为空数组
        userRepository.save(user);
    }

    /**
     * 添加好友
     *
     * @param userId   用户ID
     * @param friendId 好友ID
     */
    public void addFriend(String userId, String friendId) {
        Optional<User> userOptional = userRepository.findById(userId);
        if (userOptional.isPresent()) {
            User user = userOptional.get();
            List<String> friends = parseFriends(user.getFriends());
            if (!friends.contains(friendId)) {
                friends.add(friendId);
                user.setFriends(convertToJson(friends));
                userRepository.save(user);
            }
        }
    }

    /**
     * 获取好友列表
     *
     * @param userId 用户ID
     * @return 好友列表
     */
    public List<String> getFriends(String userId) {
        Optional<User> userOptional = userRepository.findById(userId);
        return userOptional.map(user -> parseFriends(user.getFriends())).orElse(new ArrayList<>());
    }

    /**
     * 搜索好友
     *
     * @param userId   用户ID
     * @param friendId 好友ID
     * @return 是否找到好友
     */
    public boolean searchFriend(String userId, String friendId) {
        Optional<User> userOptional = userRepository.findById(userId);
        return userOptional.map(user -> parseFriends(user.getFriends()).contains(friendId)).orElse(false);
    }

    /**
     * 检查两个用户是否为好友
     *
     * @param user1 用户1的ID
     * @param user2 用户2的ID
     * @return 是否为好友
     */
    public boolean areFriends(String user1, String user2) {
        Optional<User> userOptional = userRepository.findById(user1);
        return userOptional.map(user -> parseFriends(user.getFriends()).contains(user2)).orElse(false);
    }

    /**
     * 将 JSON 字符串解析为好友列表
     *
     * @param json JSON 格式的好友列表
     * @return 好友列表
     */
    private List<String> parseFriends(String json) {
        // 简单解析 JSON 数组，实际项目中建议使用 Jackson 或 Gson
        return new ArrayList<>(List.of(json.replaceAll("[\\[\\]\"\\s]", "").split(",")));
    }

    /**
     * 将好友列表转换为 JSON 字符串
     *
     * @param friends 好友列表
     * @return JSON 格式的字符串
     */
    private String convertToJson(List<String> friends) {
        return "[" + String.join(",", friends) + "]";
    }
}